/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;
import MAIN.DateLabelFormatter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import net.sourceforge.jdatepicker.impl.JDatePanelImpl;
import net.sourceforge.jdatepicker.impl.JDatePickerImpl;
import net.sourceforge.jdatepicker.impl.UtilDateModel;
/**
 *
 * @author Anonymous
 */
public class ChuyenXeCN2 extends javax.swing.JFrame {

    /**
     * Creates new form ChuyenXeCN
     */
    //Dùng để tạo ra khung chọn ngày tháng năm
    private JDatePickerImpl chonNgay;
    private UtilDateModel model = new UtilDateModel();//lưu dữ liệu ngày tháng năm đang chọn
    
    private int slv;//Lưu số lượng vé đang chọn
    public ChuyenXeCN2() 
    {
        initComponents(); 
        
        //Lưu thông tin chuyến xe với mã MAIN.MAIN.IDRide (đã chọn bên giao diện MAIN) vào cxdto
        DTO.ChuyenXeDTO cxdto=new DTO.ChuyenXeDTO();
        BUS.ChuyenXeBUS cxbus=new BUS.ChuyenXeBUS();
        cxdto=cxbus.ttChuyenXe(MAIN.MAIN.IDRide);
        
        //Thể hiện các giá trị đó ra giao diện
        txtMaChuyen.setText(Integer.toString(MAIN.MAIN.IDRide));
        txtMaChuyen.setEnabled(false);
        txtGaBatDau.setText(cxdto.getGaBatDau());
        txtGaKetThuc.setText(cxdto.getGaKetThuc());
        spSoLV.setModel(new javax.swing.SpinnerNumberModel(cxdto.getSoLuongVe(), cxdto.getVeDaDat(), null, 1));
        spSoLV.setValue(cxdto.getSoLuongVe());
        slv=cxdto.getGioiHanVe();
        spGioiHanVe.setModel(new javax.swing.SpinnerNumberModel(slv, 1, cxdto.getSoLuongVe(), 1));
        Date tgc=cxdto.getThoiGianChay();
        Calendar cal = Calendar.getInstance();
        cal.setTime(tgc);
        spGio.setValue(cal.get(Calendar.HOUR_OF_DAY));        
        spPhut.setValue(cal.get(Calendar.MINUTE));
        model.setDate(cal.get(Calendar.YEAR) ,cal.get(Calendar.MONTH) , cal.get(Calendar.DAY_OF_MONTH) );
        model.setSelected(true);
        spGiaTien.setModel(new javax.swing.SpinnerNumberModel(cxdto.getGiaTien(), 5000, null, 5000));
        spGiaTien.setValue(cxdto.getGiaTien());
        
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btnUpdate = new java.awt.Button();
        jLabel6 = new javax.swing.JLabel();
        txtMaChuyen = new javax.swing.JTextField();
        spPhut = new javax.swing.JSpinner();
        spGio = new javax.swing.JSpinner();
        jLabel11 = new javax.swing.JLabel();
        spGioiHanVe = new javax.swing.JSpinner();
        spSoLV = new javax.swing.JSpinner();
        jLabel7 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jButton1 = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();
        txtGaBatDau = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        txtGaKetThuc = new javax.swing.JTextField();
        spGiaTien = new javax.swing.JSpinner();
        jLabel12 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Cập Nhật Chuyến Xe");

        btnUpdate.setLabel("Cập Nhật Chuyến Xe");
        btnUpdate.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnUpdateActionPerformed(evt);
            }
        });

        jLabel6.setText("Mã Chuyến Xe");

        spPhut.setModel(new javax.swing.SpinnerNumberModel(0, 0, 60, 1));

        spGio.setModel(new javax.swing.SpinnerNumberModel(0, 0, 23, 1));

        jLabel11.setText("Phút");

        spGioiHanVe.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1)));

        spSoLV.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1)));
        spSoLV.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                spSoLVStateChanged(evt);
            }
        });

        jLabel7.setText("Thời Gian Chạy");

        jLabel4.setText("Ga Bắt Đầu");

        jLabel5.setText("Ga Kết Thúc");

        jLabel9.setText("Số Lượng Vé");

        jButton1.setText("Chọn Ngày");

        jLabel8.setText("Giờ :");

        jLabel10.setText("Giới Hạn Vé");

        spGiaTien.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(5000), Integer.valueOf(5000), null, Integer.valueOf(5000)));

        jLabel12.setText("Giá Tiền");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(264, 264, 264)
                        .addComponent(btnUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addComponent(jLabel6)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(txtMaChuyen, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 0, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(jLabel10)
                                    .addComponent(jLabel5)
                                    .addComponent(jLabel4)
                                    .addComponent(jLabel7)
                                    .addComponent(jLabel9)
                                    .addComponent(jLabel12))
                                .addGap(56, 56, 56)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addGap(1, 1, 1)
                                        .addComponent(spGio, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(jLabel8)
                                        .addGap(18, 18, 18)
                                        .addComponent(spPhut, javax.swing.GroupLayout.DEFAULT_SIZE, 45, Short.MAX_VALUE)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(jLabel11, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addGap(38, 38, 38)
                                        .addComponent(jButton1))
                                    .addGroup(layout.createSequentialGroup()
                                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                            .addComponent(spGiaTien, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(txtGaKetThuc, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(txtGaBatDau, javax.swing.GroupLayout.PREFERRED_SIZE, 205, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(spSoLV, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                                            .addComponent(spGioiHanVe, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE))
                                        .addGap(0, 0, Short.MAX_VALUE)))))))
                .addGap(95, 95, 95))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtMaChuyen, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel6))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 45, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtGaBatDau, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel4))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtGaKetThuc, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel5))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jButton1)
                        .addComponent(jLabel7))
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(spGio, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel8)
                        .addComponent(spPhut, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel11)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(jLabel9)
                            .addComponent(spSoLV, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(18, 18, 18)
                        .addComponent(jLabel10))
                    .addComponent(spGioiHanVe, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(14, 14, 14)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel12)
                    .addComponent(spGiaTien, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(17, 17, 17)
                .addComponent(btnUpdate, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        model = new UtilDateModel();
        JDatePanelImpl datePanel = new JDatePanelImpl(model);
        chonNgay = new JDatePickerImpl(datePanel,new DateLabelFormatter());
        jButton1.add(chonNgay);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnUpdateActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUpdateActionPerformed

            // TODO add your handling code here:
        
        //Lưu giá trị ngày chọn được vào tam
        Date tam=(Date) chonNgay.getModel().getValue();
        if(ktDauVao() && tam!=null)//Nếu giá trị ngày khác null và kiểm tra đầu vào hợp lệ
        {
            //Gán các thông tin chuyến xe vào cxdto
            DTO.ChuyenXeDTO cxdto=new DTO.ChuyenXeDTO();
            cxdto.setMaChuyen(Integer.parseInt(txtMaChuyen.getText()));
            cxdto.setGatBatDau(txtGaBatDau.getText().trim());
            cxdto.setGaKetThuc(txtGaKetThuc.getText().trim());
            cxdto.setSoLuongVe((int)spSoLV.getValue());
            cxdto.setGioiHanVe((int)spGioiHanVe.getValue());
            cxdto.setGiaTien((int)spGiaTien.getValue());
            
            //Tính toán và gán ngày giờ theo định dạng vào cxdto
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm dd-MM-yyyy");
            Calendar cal = Calendar.getInstance();
            cal.setTime(tam);
            try {
                cxdto.setThoiGianChay(simpleDateFormat.parse((int)spGio.getValue()+":"+(int)spPhut.getValue()+" "+cal.get(Calendar.DAY_OF_MONTH)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR)));
            } catch (ParseException ex) {
                Logger.getLogger(ChuyenXeCN2.class.getName()).log(Level.SEVERE, null, ex);
            }
                           
            BUS.ChuyenXeBUS xpbus=new BUS.ChuyenXeBUS();
            
            if(xpbus.CnChuyenXe(cxdto)){//Nếu cập nhật chuyến xe thành công
            
                //Show thông báo thành công
            JOptionPane.showMessageDialog(this,
                        "Cập nhật chuyến xe thành công!",
                        "Thông báo",
                        JOptionPane.INFORMATION_MESSAGE);
            }
            else{
                
                //Show thông báo thất bại
                JOptionPane.showMessageDialog(this,
                        "Cập nhật chuyến xe thất bại!",
                        "Thông báo lỗi",
                        JOptionPane.ERROR_MESSAGE);
            }
        }
        else
        {
            //Show thông báo lỗi đầu vào
            JOptionPane.showMessageDialog(this,
                    "Bạn chưa nhập đủ thông tin hoặc thông tin không hợp lệ.",
                    "Thông báo lỗi",
                    JOptionPane.ERROR_MESSAGE);
                
        }
    }//GEN-LAST:event_btnUpdateActionPerformed
    //Hàm kiểm tra các dữ liệu đầu vào
    private boolean ktDauVao()
    {
        
        Date tam=(Date) chonNgay.getModel().getValue();//lấy ngày được chọn
        Date tam2 = null;//lưu ngày giờ được chọn
        Date tam3=new java.util.Date();//lấy ngày giờ hiện tại
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("hh:mm dd-MM-yyyy"); 
        Calendar cal = Calendar.getInstance();
        cal.setTime(tam);
        try {
            tam2=simpleDateFormat.parse((int)spGio.getValue()+":"+(int)spPhut.getValue()+" "+cal.get(Calendar.DAY_OF_MONTH)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR));
        } catch (ParseException ex) {
            Logger.getLogger(ChuyenXeCN.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        boolean flag=false;//lưu giá trị trả về là false
        
        if(!"".equals(txtGaBatDau.getText().trim()) && //Nếu dữ liệu Ga bắt đầu và Ga kết thúc không trống
            !"".equals(txtGaKetThuc.getText().trim()) && tam2.after(tam3))//Và ngày giờ được chọn nằm sau ngày giờ hiện tại
             flag=true;//gán giá trị trả về là true
        return flag;
    }
    
    //Sự kiện khi giá trị spin Số lượng vé thay đổi
    private void spSoLVStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_spSoLVStateChanged
        // TODO add your handling code here:
        if(slv>(int)spSoLV.getValue() && //Nếu số lượng vé vừa được chọn nhỏ hơn trước đó
          (int)spGioiHanVe.getValue()>(int)spSoLV.getValue())//và số lượng vé vừa chọn nhỏ hơn giới hạn vé đang chọn
            //gán lại khoảng giá trị cho spin Giới hạn vé (giá trị:số lượng vé vừa chọn,min:1,max:số lượng vé vừa chọn)
            spGioiHanVe.setModel(new javax.swing.SpinnerNumberModel((int)spSoLV.getValue(), 1, (int)spSoLV.getValue(), 1));
        else//Ngược lại
            //gán lại khoảng giá trị cho spin Giới hạn vé (giá trị:giới hạn vé vừa chọn,min:1,max:số lượng vé vừa chọn)
            spGioiHanVe.setModel(new javax.swing.SpinnerNumberModel((int)spGioiHanVe.getValue(), 1, (int)spSoLV.getValue(), 1));
        
         slv=(int)spSoLV.getValue();//Gán lại giá trị cho số lượng vé
    }//GEN-LAST:event_spSoLVStateChanged
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(ChuyenXeCN2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ChuyenXeCN2().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private java.awt.Button btnUpdate;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JSpinner spGiaTien;
    private javax.swing.JSpinner spGio;
    private javax.swing.JSpinner spGioiHanVe;
    private javax.swing.JSpinner spPhut;
    private javax.swing.JSpinner spSoLV;
    private javax.swing.JTextField txtGaBatDau;
    private javax.swing.JTextField txtGaKetThuc;
    private javax.swing.JTextField txtMaChuyen;
    // End of variables declaration//GEN-END:variables
    
}
